

#ifndef KKK_PLAYER_LEVELUP_GIFT_H
#define KKK_PLAYER_LEVELUP_GIFT_H


#include "Player.h"
#include "Config.h"
#include "InstanceScript.h"
#include "ScriptMgr.h"
#include "ScriptedGossip.h"

using namespace std;


#define KKK_GIFT_TYPE_MONEY 0
#define KKK_GIFT_TYPE_ITEM 1
#define KKK_GIFT_TYPE_RENAME 2


//=========== Character_settings====
#define KKK_GIFT_SOURCE "kkk_gift"
#define KKK_GIFT_RENAME_INX 0  //用于存储用户 改名卡使用状态（1 表示可以使用改名卡。 0 表示不可使用）

//hard mode settings
#define KKK_GIFT_HARD_MODE_INX 1  //用于存储用户 改名卡使用状态（1 表示可以使用改名卡。 0 表示不可使用）
#define KKK_GIFT_HARD_MODE_ENABLE 0b1  //Hard mode开关位，1表示已经开启
#define KKK_GIFT_HARD_MODE_STATUS 0b10 //Hard Mode 状态为， 1 表示已经死亡
//==============================


/**
 * 当gift_type是0时，_itemId 留空。
 * 当gift_type是1时，_itemId 可以使用gm指令 .lookup item 查询后，填入正确的物品ID。（说明：目前发放物品时，item_count未生效，最后都只会发放一个）
 * 当gift_type是2时，_itemId 以及 _count 都可留空。
 * 当gift_type是3时，_itemId 为 character中的id ,_count 为经验倍数。
*/
class LeveUpGiftEntry{
    private:
        int _itemId;
        int _count;
        int _type;
    public:
        LeveUpGiftEntry(int type,int itemId,int count){
            _itemId = itemId;
            _count = count;
            _type = type;
        }
        int getType(){
            return _type;
        }

        int getCount(){
            return _count;
        }
        int getItemId(){
            return _itemId;
        }
};
class LevelUpGift{

    public:
        LevelUpGift(string aSubject,string aBody,uint32 aTargetLevel,uint32 aSenderGuid);
        ~LevelUpGift();
        void addGift(LeveUpGiftEntry *giftEntry);
        void setMonney(uint32 moneyPrice);
        vector<LeveUpGiftEntry*> getGifts(){
            return giftItems;
        }
        uint32 getMoney(){
            return money;
        }
        uint32 getTargetLevel(){
            return targetLevel;
        }
        string getSubject(){
            return subject;
        }
        string getBody(){
            return body;
        }
        uint32 getSenderGuid(){
            return senderGuid;
        }
        void mailTo(Player *player);

        void free();
    private:
        vector<LeveUpGiftEntry*>  giftItems;
        uint32 money;
        uint32 targetLevel;
        string subject;
        string body;
        uint32 senderGuid;
};


class PlayerGiftCenter{
    private:
        vector<LevelUpGift*> levelupGiftArray;
        vector<LevelUpGift*> enchantingGiftArray; //附魔技能升级时的礼包
        void clear();
        void loadLevelGifts();
        void loadEnchantingGifts(); //附魔
        void buildGift( vector<LevelUpGift*> &targetGiftArray,Field *fields, int arrayMaxItems);
    public:
        void init(void);
        LevelUpGift* getGiftByeLevel(uint32 level);
        LevelUpGift* getGiftByEnchantingLevel(uint32 enchantingLevel);
        vector<LevelUpGift*> getAllGift();
        vector<LevelUpGift*> getAlleEchantingGift(){return this->enchantingGiftArray;}

};

#define GIFT_MAX_LEVEL 100
#define CRAFTING_SKILL_MAX_LEVEL 450

#endif